common.skill

ডেটা অ্যাক্সেস (Data Access)

Microsoft Technologies - ডট নেট কোর (Dot.Net Core)
206
206

ডেটা অ্যাক্সেস অ্যাপ্লিকেশন ডেভেলপমেন্টের একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যার মাধ্যমে আপনি ডেটাবেসের সাথে যোগাযোগ করতে পারেন এবং ডেটা সংগ্রহ, সংরক্ষণ, আপডেট বা মুছে ফেলতে পারেন। ASP.NET Core এ ডেটা অ্যাক্সেসের জন্য বিভিন্ন টুল এবং টেকনিক রয়েছে, যার মধ্যে সবচেয়ে জনপ্রিয় হল Entity Framework Core (EF Core), একটি ORM (Object Relational Mapping) টুল। EF Core ডেটাবেসের সাথে কাজ করার জন্য সিম্পল API প্রদান করে, যা কোডের মাধ্যমে ডেটাবেসের টেবিলের সাথে কাজ করতে সাহায্য করে।


Entity Framework Core পরিচিতি

Entity Framework Core (EF Core) হল একটি ওপেন সোর্স এবং ক্রস-প্ল্যাটফর্ম ORM (Object Relational Mapper), যা ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহার করা হয়। EF Core ডেভেলপারদের SQL কোড লিখতে না দিয়ে C# ক্লাসের মাধ্যমে ডেটাবেসের ডেটা ম্যানিপুলেট করতে সাহায্য করে।

EF Core ব্যবহার করে আপনি নিম্নলিখিত কাজগুলো করতে পারেন:

  • ডেটাবেসে নতুন রেকর্ড তৈরি (Create)
  • ডেটা পড়া (Read)
  • ডেটা আপডেট করা (Update)
  • ডেটা মুছে ফেলা (Delete)

EF Core-এ সাধারণত DbContext ক্লাসের মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করা হয়।


DbContext এবং Database Migrations

DbContext হল EF Core এর প্রধান কম্পোনেন্ট, যা ডেটাবেসের টেবিলের সাথে অ্যাপ্লিকেশন মডেলগুলো ম্যাপ করে এবং ডেটা ম্যানিপুলেশনের জন্য API প্রদান করে।

  1. DbContext ক্লাস তৈরি করা
    DbContext ক্লাস তৈরি করতে, আপনাকে আপনার মডেল ক্লাসগুলোকে DbSet প্রপার্টি হিসেবে যুক্ত করতে হবে:

    public class ApplicationDbContext : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
        public DbSet<Order> Orders { get; set; }
    
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        { }
    }
    

    এখানে Customers এবং Orders হল DbSet, যা ডেটাবেসের টেবিলের সাথে সম্পর্কিত।

  2. Database Migrations
    Migrations হল একটি প্রক্রিয়া, যার মাধ্যমে ডেটাবেসের স্কিমা পরিবর্তন করা হয় (যেমন নতুন টেবিল যোগ করা, প্রপার্টি আপডেট করা ইত্যাদি)। Migrations EF Core এর মাধ্যমে সৃষ্ট হয় এবং তা আপনার ডেটাবেসের সাথে সিঙ্ক্রোনাইজড থাকে।
    • প্রথম মাইগ্রেশন তৈরি করতে:

      dotnet ef migrations add InitialCreate
      
    • মাইগ্রেশন ডেটাবেসে প্রয়োগ করতে:

      dotnet ef database update
      

LINQ এবং Query Writing

LINQ (Language Integrated Query) হল একটি শক্তিশালী ফিচার যা C# এর সাথে SQL-এর মত কুয়েরি লোগিক একীভূত করে, যাতে ডেটা অ্যাক্সেস করা সহজ হয়।

  1. LINQ ব্যবহার করে ডেটা রিড করা
    DbContext এর মাধ্যমে LINQ কোয়েরি ব্যবহার করে ডেটা অ্যাক্সেস করা যায়:

    var customers = dbContext.Customers
                             .Where(c => c.City == "Dhaka")
                             .ToList();
    

    এখানে Where ক্লজ ব্যবহার করে নির্দিষ্ট শর্ত অনুযায়ী ডেটা ফিল্টার করা হয়েছে।

  2. লিনক কুয়েরি অপারেটর
    EF Core তে LINQ এর সাহায্যে বিভিন্ন ধরনের কুয়েরি অপারেটর ব্যবহার করা হয়:

    • Select: নির্দিষ্ট কলাম নির্বাচন করা।
    • FirstOrDefault: প্রথম রেকর্ড বা ডিফল্ট মান পাওয়া।
    • OrderBy: ডেটা সাজানো।

    উদাহরণ:

    var orderedCustomers = dbContext.Customers
                                     .OrderBy(c => c.Name)
                                     .ToList();
    

CRUD অপারেশন (Create, Read, Update, Delete)

CRUD অপারেশন হল ডেটাবেস ম্যানিপুলেশনের মৌলিক কার্যাবলী। EF Core তে এই অপারেশনগুলো খুব সহজেই করা যায়।

  1. Create (নতুন রেকর্ড তৈরি করা):

    var customer = new Customer { Name = "John Doe", City = "Dhaka" };
    dbContext.Customers.Add(customer);
    dbContext.SaveChanges();
    
  2. Read (ডেটা পড়া):

    var customer = dbContext.Customers
                             .FirstOrDefault(c => c.Name == "John Doe");
    
  3. Update (ডেটা আপডেট করা):

    var customer = dbContext.Customers
                             .FirstOrDefault(c => c.Name == "John Doe");
    if (customer != null)
    {
        customer.City = "Chittagong";
        dbContext.SaveChanges();
    }
    
  4. Delete (ডেটা মুছে ফেলা):

    var customer = dbContext.Customers
                             .FirstOrDefault(c => c.Name == "John Doe");
    if (customer != null)
    {
        dbContext.Customers.Remove(customer);
        dbContext.SaveChanges();
    }
    

ফর্ম এবং ডেটা ভ্যালিডেশন (Forms and Data Validation)

ফর্ম ভ্যালিডেশন এবং ডেটা ভ্যালিডেশন গুরুত্বপূর্ণ, কারণ এটি নিশ্চিত করে যে ইউজার ইনপুট সঠিক এবং নিরাপদ।

  1. Model Binding এবং Validation Attributes
    ASP.NET Core মডেল বাইন্ডিং এর মাধ্যমে ইউজার ইনপুটকে অটোমেটিকভাবে মডেলে বাউন্ড করা হয় এবং ডেটা ভ্যালিডেশন অ্যাট্রিবিউট ব্যবহার করে ইনপুট চেক করা হয়। উদাহরণ:

    public class Customer
    {
        [Required]
        public string Name { get; set; }
    
        [EmailAddress]
        public string Email { get; set; }
    }
    
  2. Custom Validation
    কখনও কখনও, আপনার নির্দিষ্ট ভ্যালিডেশন লজিক প্রয়োজন হয়, তখন আপনি কাস্টম ভ্যালিডেশন অ্যাট্রিবিউট ব্যবহার করতে পারেন:

    public class ValidAgeAttribute : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if ((int)value < 18)
            {
                return new ValidationResult("Age must be greater than or equal to 18.");
            }
            return ValidationResult.Success;
        }
    }
    

সারাংশ
ডেটা অ্যাক্সেস ASP.NET Core-এ খুবই গুরুত্বপূর্ণ, এবং এটি Entity Framework Core (EF Core) দিয়ে সহজেই পরিচালিত হয়। EF Core ডেটাবেসের সাথে সম্পর্ক স্থাপন, ডেটা ম্যানিপুলেশন এবং মাইগ্রেশন প্রক্রিয়া সরল করে দেয়। LINQ এর মাধ্যমে কোডে SQL-এর মত কুয়েরি করা যায়, এবং CRUD অপারেশন সহজেই করা যায়। এছাড়া, ফর্ম এবং ডেটা ভ্যালিডেশন প্রক্রিয়াগুলি সঠিক ইনপুট নিশ্চিত করতে সাহায্য করে।

common.content_added_by

Entity Framework Core পরিচিতি

219
219

Entity Framework Core (EF Core) হলো একটি ওপেন সোর্স, ক্রস-প্ল্যাটফর্ম ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক, যা .NET Core অ্যাপ্লিকেশনগুলোর জন্য ডেটাবেস অ্যাক্সেস সহজ করে তোলে। EF Core-এর মাধ্যমে ডেভেলপাররা সম্পর্কিত ডেটাবেসের সাথে কার্যকরীভাবে কাজ করতে পারেন, তবে তারা SQL কোড না লিখে C# কোড ব্যবহার করে ডেটাবেস অপারেশনগুলো সম্পাদন করতে পারেন। এটি LINQ (Language Integrated Query) ব্যবহার করে ডেটা রিট্রাইভ, ইনসার্ট, আপডেট এবং ডিলিট করার সুবিধা দেয়।

EF Core মূলত Entity Framework এর পরবর্তী ভার্সন, যা .NET Core প্ল্যাটফর্মের জন্য বিশেষভাবে উন্নয়ন করা হয়েছে এবং পূর্ববর্তী ভার্সন থেকে আরও বেশি দ্রুত, ছোট ও ক্রস-প্ল্যাটফর্ম সমর্থনকারী।


EF Core এর প্রধান বৈশিষ্ট্যসমূহ


  1. Object-Relational Mapping (ORM)
    EF Core সম্পর্কিত ডেটাবেসে (যেমন SQL Server, SQLite, PostgreSQL ইত্যাদি) থাকা ডেটাকে C# ক্লাস বা অবজেক্ট হিসেবে মডেল করে। EF Core এ অবজেক্টগুলো মডেল এবং ডেটাবেস টেবিলগুলোর মধ্যে ম্যাপিং (mapping) করে। উদাহরণস্বরূপ, ডেটাবেসের একটি Product টেবিল EF Core এর মাধ্যমে Product ক্লাসের সাথে সম্পর্কিত হবে।
  2. Cross-Platform Support
    EF Core .NET Core অ্যাপ্লিকেশনের জন্য তৈরি হওয়ায় এটি উইন্ডোজ, লিনাক্স এবং ম্যাকOS-এ কাজ করতে পারে। তাই, এটি ক্রস-প্ল্যাটফর্ম অ্যাপ্লিকেশনে ব্যবহৃত হতে পারে, যেমন ASP.NET Core অ্যাপ্লিকেশন।
  3. LINQ (Language Integrated Query)
    EF Core LINQ সাপোর্ট করে, যার মাধ্যমে C# কোডের মধ্যেই ডেটাবেস কোয়েরি করা সম্ভব। এটি ডেভেলপারদের SQL কোড না লিখে সিম্পল C# কোডে ডেটাবেস অপারেশন করতে সাহায্য করে। উদাহরণস্বরূপ:

    var products = context.Products
                           .Where(p => p.Price > 100)
                           .ToList();
    
  4. Migrations (ডেটাবেস মাইগ্রেশন)
    EF Core মাইগ্রেশন ফিচার দিয়ে ডেটাবেসের স্কিমা পরিবর্তন সহজভাবে ম্যানেজ করা যায়। যখন মডেল ক্লাসে কোনো পরিবর্তন করা হয়, তখন EF Core মাইগ্রেশন ব্যবহার করে ডেটাবেসে সেই পরিবর্তনটি প্রয়োগ করা যায়। এটি ডেটাবেস সংস্করণ নিয়ন্ত্রণের মতো কাজ করে।
  5. Lazy Loading and Eager Loading
    EF Core ডেটাবেস রিলেশনশিপ হ্যান্ডল করতে Lazy Loading এবং Eager Loading সাপোর্ট করে। Lazy Loading হলে সম্পর্কিত ডেটা তখনই লোড হবে যখন তা প্রয়োজন হবে, আর Eager Loading-এ সম্পর্কিত ডেটা একসাথে লোড হবে।
  6. Change Tracking
    EF Core স্বয়ংক্রিয়ভাবে ডেটা পরিবর্তন ট্র্যাক করে। ডেভেলপাররা যখন মডেল অবজেক্টে ডেটা পরিবর্তন করেন, EF Core তা জানে এবং ডেটাবেসে সেই পরিবর্তনগুলো সেভ করার জন্য প্রস্তুত থাকে।
  7. Support for Raw SQL Queries
    EF Core ডেভেলপারদের Raw SQL কুয়েরি লেখার সুবিধা দেয়। যদি কোন পরিস্থিতিতে LINQ দিয়ে কোয়েরি করা সম্ভব না হয়, তবে সরাসরি SQL কোড ব্যবহার করা যেতে পারে।

EF Core এর কার্যপ্রণালী


EF Core ডেটাবেসের সাথে যোগাযোগ করার জন্য সাধারণত DbContext ক্লাস ব্যবহার করা হয়, যা ডেটাবেসের সাথে ইনটের‌্যাক্ট করতে ডেভেলপারকে সাহায্য করে। DbContext ডেটাবেসের সাথে সম্পর্কিত মডেল ক্লাসগুলো (Entities) এবং ডেটাবেস টেবিলের মধ্যে ম্যাপিং করে।

DbContext এর উদাহরণ

public class ApplicationDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }
    public DbSet<Customer> Customers { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("ConnectionStringHere");
    }
}

এখানে, Product এবং Customer দুটি মডেল ক্লাস, যেগুলো ডেটাবেসের টেবিলের সাথে ম্যাপ করা হয়েছে। OnConfiguring মেথডে ডেটাবেসের সংযোগ স্ট্রিং (Connection String) কনফিগার করা হয়।


EF Core দিয়ে ডেটাবেস অপারেশন

EF Core ব্যবহারের মাধ্যমে ডেটাবেসে ডেটা Create, Read, Update, এবং Delete (CRUD) অপারেশন করা যায়।

1. Create (ডেটা সন্নিবেশ)

var product = new Product { Name = "Laptop", Price = 1000 };
context.Products.Add(product);
context.SaveChanges();

এখানে, Product অবজেক্ট তৈরি করা হয়েছে এবং Add মেথডের মাধ্যমে ডেটাবেসে সন্নিবেশিত হয়েছে।

2. Read (ডেটা পড়া)

var products = context.Products.Where(p => p.Price > 500).ToList();

এটি Price 500 এর বেশি এমন সকল Product অবজেক্ট রিটার্ন করবে।

3. Update (ডেটা আপডেট)

var product = context.Products.First(p => p.Id == 1);
product.Price = 1200;
context.SaveChanges();

এটি Id = 1 এর Product অবজেক্টের মূল্য পরিবর্তন করবে এবং SaveChanges মেথডের মাধ্যমে সেই পরিবর্তন ডেটাবেসে সেভ করবে।

4. Delete (ডেটা মুছতে)

var product = context.Products.First(p => p.Id == 1);
context.Products.Remove(product);
context.SaveChanges();

এটি Id = 1 এর Product অবজেক্ট ডেটাবেস থেকে মুছে ফেলবে।


EF Core-এর সুবিধা

  1. Rapid Development: EF Core ডেভেলপারদের SQL কোড লিখতে বাধ্য না করে, C# কোড ব্যবহার করে ডেটাবেস পরিচালনা করতে সহায়তা করে, যা ডেভেলপমেন্টের গতিকে দ্রুত করে।
  2. Strongly Typed Queries: EF Core LINQ সাপোর্ট করে, যার ফলে কোডে ভুল হওয়া সম্ভাবনা কমে এবং Compile-time checking হয়।
  3. Automatic Change Tracking: ডেটা পরিবর্তন ট্র্যাকিং সুবিধা স্বয়ংক্রিয়ভাবে নিশ্চিত করে, যা ডেটাবেসে আপডেট করতে সহায়তা করে।
  4. Cross-Platform: EF Core .NET Core-এর সাথে ক্রস-প্ল্যাটফর্ম সাপোর্ট করে, যার ফলে একাধিক প্ল্যাটফর্মে অ্যাপ্লিকেশন ডেভেলপ করা যায়।
  5. Migrations Support: EF Core মাইগ্রেশন সিস্টেম ব্যবহার করে ডেটাবেস স্কিমা আপডেট করা সহজ হয়।
  6. Rich Querying Capabilities: EF Core তে LINQ সাপোর্ট ছাড়াও, Raw SQL, Stored Procedures, এবং Views ব্যবহার করার সুবিধা রয়েছে।

সারাংশ

Entity Framework Core একটি শক্তিশালী ORM ফ্রেমওয়ার্ক যা ডেভেলপারদের SQL কোড লিখা ছাড়াই ডেটাবেস অপারেশন সম্পাদন করতে সহায়তা করে। এটি ডেভেলপমেন্টে গতি আনে, কোডের সঠিকতা বাড়ায় এবং ডেটাবেস স্কিমা ও ডেটা ম্যানেজমেন্ট সহজ করে। EF Core বিশেষভাবে .NET Core অ্যাপ্লিকেশনের জন্য ডিজাইন করা, যা ক্রস-প্ল্যাটফর্ম সাপোর্ট করে এবং মাইগ্রেশন ও ডেটাবেস অপটিমাইজেশনের সুবিধা দেয়।

common.content_added_by

DbContext এবং Database Migrations

223
223

DbContext এবং Database Migrations হল Entity Framework Core (EF Core)-এর দুটি প্রধান অংশ, যা ডেটাবেসের সাথে কাজ করার প্রক্রিয়াকে সহজ করে তোলে। DbContext ডেটাবেসের সাথে যোগাযোগের মাধ্যম হিসেবে কাজ করে এবং Migrations ডেটাবেসের স্কিমা পরিবর্তন এবং তার সাথে সম্পর্কিত কনফিগারেশনগুলো ট্র্যাক করে। চলুন, এগুলো সম্পর্কে বিস্তারিত জানি।


DbContext পরিচিতি

DbContext EF Core-এর কেন্দ্রীয় অংশ। এটি ডেটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয় এবং DbSet প্রপার্টি ব্যবহার করে ডেটাবেস টেবিলের সাথে সম্পর্ক স্থাপন করে।

  • DbContext ক্লাস তৈরি করা:
    DbContext তৈরি করার জন্য আপনাকে একটি ক্লাস তৈরি করতে হবে যেটি DbContext থেকে ইনহেরিট করবে। এতে আপনার মডেল ক্লাসগুলো DbSet হিসেবে সংজ্ঞায়িত করতে হবে।

    উদাহরণ:

    public class ApplicationDbContext : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
        public DbSet<Order> Orders { get; set; }
    
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        { }
    }
    

    এখানে Customers এবং Orders হল DbSet, যা ডেটাবেসের টেবিলের সাথে সম্পর্কিত।

  • DbContext-এর ব্যবহার: DbContext ক্লাসের মাধ্যমে ডেটাবেসে কুয়েরি করা, রেকর্ড তৈরি, রেকর্ড আপডেট করা, বা ডিলিট করা সম্ভব। এটি EF Core এর মাধ্যমে ডেটাবেস অপারেশনগুলো পরিচালনা করে।

Database Migrations

Migrations হল ডেটাবেসের স্কিমার মধ্যে পরিবর্তন ট্র্যাক করার একটি প্রক্রিয়া। যখন আপনি নতুন মডেল তৈরি করেন বা বিদ্যমান মডেলে কোনো পরিবর্তন আনেন, তখন EF Core Migrations তৈরি করে, যা ডেটাবেসের স্কিমা পরিবর্তনের জন্য প্রয়োজনীয় কমান্ডগুলো তৈরি করে। মাইগ্রেশনগুলির মাধ্যমে ডেটাবেসের আপডেট করা হয়, এবং এটি ডেটাবেস এবং কোডের মধ্যে সিঙ্ক্রোনাইজেশন বজায় রাখে।

মাইগ্রেশন তৈরি করা

  1. মাইগ্রেশন তৈরি করা:
    প্রথমে, আপনি যখন মডেলে কোনো পরিবর্তন করবেন (যেমন নতুন প্রপার্টি বা ক্লাস যোগ করা), তখন আপনাকে একটি নতুন মাইগ্রেশন তৈরি করতে হবে। এটি করতে নিচের কমান্ড ব্যবহার করা হয়:

    dotnet ef migrations add InitialCreate
    

    এই কমান্ডটি একটি মাইগ্রেশন ফাইল তৈরি করবে, যা ডেটাবেসের স্কিমা পরিবর্তনের জন্য প্রয়োজনীয় কোড ধারণ করবে।

  2. ডেটাবেস আপডেট করা:
    একবার মাইগ্রেশন তৈরি হলে, আপনি dotnet ef database update কমান্ড ব্যবহার করে ডেটাবেসে সেই মাইগ্রেশন প্রয়োগ করতে পারবেন। এটি ডেটাবেসে নতুন স্কিমা পরিবর্তন আনবে।

    dotnet ef database update
    

মাইগ্রেশন ফাইল

মাইগ্রেশন ফাইলটি একটি C# ক্লাস যা দুটি মেথড ধারণ করে:

  • Up(): এই মেথডটি নতুন স্কিমা পরিবর্তনগুলো ডেটাবেসে প্রয়োগ করার জন্য ব্যবহৃত হয়।
  • Down(): এই মেথডটি স্কিমার পরিবর্তন ফিরিয়ে আনার জন্য ব্যবহৃত হয় (যদি আপনি মাইগ্রেশন বাতিল করতে চান)।

এখানে একটি উদাহরণ:

public partial class InitialCreate : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "Customers",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:Identity", "1, 1"),
                Name = table.Column<string>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Customers", x => x.Id);
            });
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(
            name: "Customers");
    }
}

এখানে Up() মেথডে একটি Customers টেবিল তৈরি করা হয়েছে, এবং Down() মেথডে ঐ টেবিলটি মুছে ফেলার নির্দেশনা দেওয়া হয়েছে।


মাইগ্রেশন ব্যবস্থাপনা

  1. মাইগ্রেশন ফিরিয়ে আনা:
    কখনও কখনও, আপনি একটি মাইগ্রেশন রোলব্যাক করতে চাইলে dotnet ef migrations remove কমান্ড ব্যবহার করতে পারেন, যা শেষ তৈরি হওয়া মাইগ্রেশনটি বাতিল করে।

    dotnet ef migrations remove
    
  2. মাইগ্রেশন হালনাগাদ করা:
    আপনি যদি মাইগ্রেশন ফাইল পরিবর্তন করতে চান (যেমন, নতুন কোড বা ডেটা পরিবর্তন), তবে dotnet ef migrations add কমান্ড ব্যবহার করে একটি নতুন মাইগ্রেশন ফাইল তৈরি করুন এবং dotnet ef database update কমান্ড দিয়ে তা ডেটাবেসে প্রয়োগ করুন।
  3. মাইগ্রেশন ইতিহাস দেখা:
    আপনি dotnet ef migrations list কমান্ড ব্যবহার করে বর্তমানে সমস্ত মাইগ্রেশন ফাইলের একটি তালিকা দেখতে পারেন।

    dotnet ef migrations list
    

সারাংশ

DbContext EF Core-এ ডেটাবেসের সাথে সম্পর্ক স্থাপনের প্রধান উপাদান, যা আপনার মডেল এবং ডেটাবেস টেবিলের মধ্যে ম্যাপিং করে। Migrations ডেটাবেসের স্কিমা পরিবর্তন ট্র্যাক এবং প্রয়োগ করার প্রক্রিয়া, যা ডেটাবেস এবং কোডের মধ্যে সিঙ্ক্রোনাইজেশন বজায় রাখে। মাইগ্রেশন তৈরি, আপডেট এবং রোলব্যাক করার মাধ্যমে আপনি সহজেই ডেটাবেসের স্কিমা পরিবর্তন করতে পারবেন। EF Core এ এই দুটি টুল ব্যবহারের মাধ্যমে ডেটাবেসের কার্যক্রম সহজ, দ্রুত, এবং দক্ষভাবে পরিচালিত হয়।

common.content_added_by

LINQ এবং Query Writing

242
242

LINQ (Language Integrated Query) হল .NET ফ্রেমওয়ার্কে একটি শক্তিশালী টুল যা আপনাকে C# বা VB.NET কোডের মধ্যে সরাসরি ডেটা কুয়েরি করতে সহায়তা করে। LINQ ব্যবহার করে আপনি ডেটাবেস, XML, বা ইন-মেমরি কালেকশনগুলোর উপরে কুয়েরি লিখতে পারেন। এর মাধ্যমে আপনি SQL বা অন্য কোনো ডেটাবেস কুয়েরি ভাষার মতোই C# ভাষায় ডেটা রিট্রাইভ, ফিল্টার, গ্রুপ বা অর্ডার করতে পারেন।

LINQ এর প্রধান সুবিধা হল যে, এটি এক ধরনের টাইপ-সেফ (Type-Safe) কুয়েরি লেখা প্রক্রিয়া, যা আপনাকে কম্পাইল টাইমে ভুল চিহ্নিত করতে সহায়তা করে।


LINQ এর বিভিন্ন প্রকার

LINQ দুটি প্রধান প্রকারে বিভক্ত:

  1. LINQ to Objects: ইন-মেমরি কালেকশন (যেমন, অ্যারে, লিস্ট ইত্যাদি) এর উপরে কুয়েরি করার জন্য ব্যবহার হয়।
  2. LINQ to SQL / Entity Framework: ডেটাবেসের উপরে কুয়েরি করার জন্য ব্যবহৃত হয়। এখানে SQL কুয়েরি C# কোডে লেখা যায়, এবং LINQ এর মাধ্যমে SQL কুয়েরি তৈরি করা হয়।

LINQ Query Syntax

LINQ এ কুয়েরি লেখার জন্য দুটি প্রধান সিনট্যাক্স ব্যবহার করা হয়:

  • Query Syntax (SQL-এর মতো)
  • Method Syntax (C# মেথড কলিং এর মতো)

Query Syntax

Query Syntax খুবই SQL-এর মতো। এটি সাধারণত ডেটা ফিল্টারিং, গ্রুপিং বা অর্ডার করার জন্য সহজ এবং পড়তে সুবিধাজনক।

var result = from student in students
             where student.Age > 18
             orderby student.Name
             select student;

উপরের উদাহরণে, students কালেকশন থেকে সকল ছাত্রকে নির্বাচন করা হয়েছে যাদের বয়স ১৮ এর বেশি, এবং তারপর তাদের নাম অনুসারে সাজানো হয়েছে।


Method Syntax

Method Syntax LINQ এর মেথড কলিং এর মাধ্যমে কুয়েরি লেখার একটি পদ্ধতি। এটি একটু বেশি কোডেড এবং অনেক ক্ষেত্রে LINQ এর মেথডগুলোর উপযোগিতা বেশি হয়।

var result = students.Where(s => s.Age > 18)
                     .OrderBy(s => s.Name)
                     .Select(s => s);

এখানে Where, OrderBy, এবং Select মেথড ব্যবহার করা হয়েছে, যা একই কাজ Query Syntax এর মতোই করে।


LINQ Operations

LINQ-এ সাধারণত যে সব অপারেশন ব্যবহার করা হয় তা নিচে ব্যাখ্যা করা হল:

  1. Where: ডেটা ফিল্টার করার জন্য ব্যবহৃত হয়।

    var adults = students.Where(s => s.Age > 18);
    
  2. Select: ডেটার নির্দিষ্ট অংশ নির্বাচন করার জন্য ব্যবহৃত হয়।

    var studentNames = students.Select(s => s.Name);
    
  3. OrderBy: ডেটা সাজানোর জন্য ব্যবহৃত হয়।

    var orderedStudents = students.OrderBy(s => s.Name);
    
  4. GroupBy: ডেটাকে গ্রুপে ভাগ করার জন্য ব্যবহৃত হয়।

    var studentsGroupedByAge = students.GroupBy(s => s.Age);
    
  5. Join: দুটি ডেটা কালেকশনকে একত্রিত করার জন্য ব্যবহৃত হয়।

    var studentCourses = from student in students
                         join course in courses on student.CourseId equals course.Id
                         select new { student.Name, course.Name };
    
  6. First: প্রথম উপাদান নির্বাচন করে।

    var firstStudent = students.First();
    
  7. ToList: কুয়েরি ফলাফলকে একটি লিস্টে রূপান্তরিত করে।

    var studentList = students.Where(s => s.Age > 18).ToList();
    

LINQ with Entity Framework

LINQ এবং Entity Framework একসাথে ব্যবহৃত হয় ডেটাবেস কুয়েরি করার জন্য। এখানে LINQ কুয়েরি Entity Framework এর মাধ্যমে ডেটাবেসে পাঠানো হয়, এবং এটি SQL কুয়েরিতে রূপান্তরিত হয়ে ডেটাবেসে কার্যকর হয়।

var students = dbContext.Students
                        .Where(s => s.Age > 18)
                        .OrderBy(s => s.Name)
                        .ToList();

এখানে dbContext.Students Entity Framework এর মাধ্যমে ডেটাবেসের Students টেবিলকে রেফার করে এবং LINQ কুয়েরি ডেটাবেসের উপরে কার্যকর হয়।


LINQ Query Writing Best Practices

  1. Readable Code: LINQ কুয়েরি লেখার সময় কোডটি পড়তে সহজ এবং পরিষ্কার হওয়া উচিত। সাধারণত Query Syntax বেশি পড়তে সহজ হয়, কিন্তু Method Syntax আরও লচিল (flexible)।
  2. Avoid Multiple Enumerations: LINQ কুয়েরি বারবার চালানো avoid করা উচিত। এটি পারফরম্যান্সের জন্য খারাপ হতে পারে।
  3. Use Deferred Execution Carefully: LINQ কুয়েরি এ Deferred Execution ব্যবহার করলে, কুয়েরি ফলাফল তখনই এক্সিকিউট হবে যখন আপনার ডেটা দরকার হবে। কিন্তু এটি কখনও কখনও অপ্রত্যাশিত ফলাফল দিতে পারে, তাই এ নিয়ে সতর্ক থাকতে হবে।

সারাংশ

LINQ .NET এর একটি শক্তিশালী বৈশিষ্ট্য যা ডেটাবেস, ইন-মেমরি কালেকশন এবং XML ফাইলের মতো ডেটা সোর্সের উপর কার্যকর কুয়েরি চালাতে সাহায্য করে। এটি Query Syntax এবং Method Syntax এর মাধ্যমে লেখা যায় এবং এতে ডেটা ফিল্টারিং, গ্রুপিং, অর্ডারিং এবং জয়নিং এর মতো অপারেশন সমর্থিত। LINQ-এর মাধ্যমে ডেটা আরো সহজ, টাইপ-সেফ এবং কার্যকরভাবে প্রক্রিয়া করা সম্ভব।

common.content_added_by

CRUD অপারেশন (Create, Read, Update, Delete)

205
205

CRUD (Create, Read, Update, Delete) অপারেশন হল ডেটাবেস অ্যাপ্লিকেশন বা সফটওয়্যার অ্যাপ্লিকেশনগুলির মৌলিক কার্যকলাপ। এগুলি ডেটা পরিচালনার জন্য ব্যবহৃত হয় এবং অধিকাংশ ওয়েব অ্যাপ্লিকেশন এবং সফটওয়্যার সিস্টেমে এই অপারেশনগুলোর প্রয়োজন পড়ে।

ASP.NET Core-এ CRUD অপারেশনগুলো Entity Framework Core (EF Core) ব্যবহার করে খুব সহজে সম্পন্ন করা যায়। EF Core হল একটি ORM (Object-Relational Mapping) টুল, যা ডেটাবেসের সাথে কাজ করার জন্য একটি আবস্ট্রাক্ট লেয়ার প্রদান করে। এটি SQL কমান্ড লেখার পরিবর্তে অবজেক্ট-ভিত্তিক কোড ব্যবহার করতে সাহায্য করে।

এখানে, CRUD অপারেশনগুলো কিভাবে ASP.NET Core অ্যাপ্লিকেশন ব্যবহার করে পরিচালনা করা যায়, তা দেখানো হবে।


Create (ডেটা তৈরি)

Create অপারেশনটি নতুন ডেটা তৈরি করার জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি নতুন Product তৈরি করা।

কোড উদাহরণ:

[HttpPost]
public IActionResult CreateProduct([FromBody] Product product)
{
    if (ModelState.IsValid)
    {
        _context.Products.Add(product);
        _context.SaveChanges();
        return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product);
    }
    return BadRequest(ModelState);
}

এখানে, [HttpPost] অ্যাট্রিবিউট ব্যবহার করা হয়েছে, যা নির্দেশ করে এই অ্যাকশনটি HTTP POST রিকুয়েস্টে কাজ করবে। Product অবজেক্টটি HTTP রিকুয়েস্টের বডি থেকে মডেল বাইন্ডিংয়ের মাধ্যমে আসবে এবং সেটি ডেটাবেসে সংরক্ষণ করা হবে।


Read (ডেটা পড়া)

Read অপারেশনটি ডেটাবেস থেকে ডেটা পড়ার জন্য ব্যবহৃত হয়। সাধারণত এটি GET রিকুয়েস্টের মাধ্যমে সম্পন্ন করা হয়।

কোড উদাহরণ:

[HttpGet("{id}")]
public IActionResult GetProduct(int id)
{
    var product = _context.Products.Find(id);
    if (product == null)
    {
        return NotFound();
    }
    return Ok(product);
}

এখানে, [HttpGet("{id}")] অ্যাট্রিবিউটটি একটি GET রিকুয়েস্টের জন্য রাউটিং কনফিগার করে, যাতে id প্যারামিটার দ্বারা নির্দিষ্ট একটি Product রিটার্ন করা হয়। _context.Products.Find(id) কোডটি ডেটাবেস থেকে সেই নির্দিষ্ট id এর প্রোডাক্টটি খুঁজে বের করে।


Update (ডেটা আপডেট)

Update অপারেশনটি পূর্বের ডেটা আপডেট করার জন্য ব্যবহৃত হয়। এটি সাধারণত PUT বা PATCH HTTP পদ্ধতি ব্যবহার করে করা হয়।

কোড উদাহরণ:

[HttpPut("{id}")]
public IActionResult UpdateProduct(int id, [FromBody] Product product)
{
    var existingProduct = _context.Products.Find(id);
    if (existingProduct == null)
    {
        return NotFound();
    }

    existingProduct.Name = product.Name;
    existingProduct.Price = product.Price;
    _context.SaveChanges();

    return NoContent();
}

এখানে, [HttpPut("{id}")] অ্যাট্রিবিউট PUT রিকুয়েস্টে ব্যবহৃত হয় এবং নির্দিষ্ট id এর Product অবজেক্টটিকে আপডেট করে। ডেটাবেসে সঞ্চিত পুরানো ডেটাকে নতুন ডেটা দিয়ে প্রতিস্থাপন করা হয় এবং তারপর পরিবর্তনগুলি _context.SaveChanges() এর মাধ্যমে ডেটাবেসে সেভ করা হয়।


Delete (ডেটা মুছে ফেলা)

Delete অপারেশনটি ডেটাবেস থেকে ডেটা মুছে ফেলার জন্য ব্যবহৃত হয়। এটি সাধারণত DELETE HTTP পদ্ধতির মাধ্যমে করা হয়।

কোড উদাহরণ:

[HttpDelete("{id}")]
public IActionResult DeleteProduct(int id)
{
    var product = _context.Products.Find(id);
    if (product == null)
    {
        return NotFound();
    }

    _context.Products.Remove(product);
    _context.SaveChanges();

    return NoContent();
}

এখানে, [HttpDelete("{id}")] অ্যাট্রিবিউট DELETE রিকুয়েস্টের জন্য ব্যবহৃত হয়। এই অ্যাকশনটি নির্দিষ্ট id এর Product ডেটা খুঁজে পায় এবং তা ডেটাবেস থেকে মুছে ফেলে। এরপর পরিবর্তনগুলি _context.SaveChanges() এর মাধ্যমে সেভ করা হয়।


CRUD অপারেশনের সারাংশ

  • Create: নতুন ডেটা তৈরি করে ডেটাবেসে সেভ করা হয়।
  • Read: ডেটাবেস থেকে তথ্য পড়া হয় এবং ক্লায়েন্টকে রিটার্ন করা হয়।
  • Update: বিদ্যমান ডেটাকে আপডেট করে ডেটাবেসে পরিবর্তন আনা হয়।
  • Delete: ডেটাবেস থেকে বিদ্যমান ডেটা মুছে ফেলা হয়।

ASP.NET Core এবং Entity Framework Core ব্যবহার করে CRUD অপারেশনগুলি খুব সহজে এবং দ্রুত সম্পন্ন করা সম্ভব। এর মাধ্যমে আপনি ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে পারবেন এবং ওয়েব অ্যাপ্লিকেশনগুলোর কার্যকরী ফাংশনালিটি তৈরি করতে পারবেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion